from django.db import models

from company.models import Vehicle

# Create your models here.


class Region(models.Model):
    """区域

    808标准区域
    - 设置圆形区域:     0x8600
        - 中心点 + 半径
    - 设置矩形区域:     0x8602
        - 左上经纬 + 右下经纬
    - 设置多边形区域:   0x8604
        - 多顶点拼接
    """

    CategoryChoice = (
        ('CIRCLE', '圆形'),
        ('RECTANGLE', '矩形'),
        ('POLYGON', '多边形'),
    )
    # 808
    attribute = models.IntegerField(
        default=0b0000_0000_0000_0000,
        verbose_name="""
        区域参数设置，0x00-0xFF
        位      标志
        --      ------
        0       1:根据时间
        1       1:限速
        2       1:进区域报警给驾驶员
        3       1:进区域报警给平台
        4       1:出区域报警给驾驶员
        5       1:出区域报警给平台
        6       0:北纬      1:南纬
        7       0:东经      1:西经
        8       0:允许开门   1:禁止开门
        9-13    保留
        14      0:进区域开启通信模块              1:进区域关闭通信模块
        15      0:进区域不采集GNSS 详细定位数据    1:进区域采集GNSS 详细定位数据
        """,
    )
    radius = models.IntegerField(blank=True, null=True, verbose_name='半径，若是圆形区域，则此字段非空，单位为米')
    points_num = models.SmallIntegerField(blank=True, null=True, verbose_name='总顶点数，若是多边形区域，则此字段非空')
    start_time = models.DateTimeField(blank=True, null=True, verbose_name='起始时间')
    end_time = models.DateTimeField(blank=True, null=True, verbose_name='结束时间')
    max_speed = models.IntegerField(blank=True, null=True, verbose_name='最高速度')
    overspeed_duration = models.IntegerField(blank=True, null=True, verbose_name='超速持续时间，单位为秒，0x00-0xFF')
    # 自定义
    name = models.CharField(max_length=30, verbose_name='区域名称')
    category = models.CharField(max_length=10, choices=CategoryChoice, default=CategoryChoice[0][0], verbose_name='区域类型')
    created_time = models.DateTimeField(auto_now_add=True, editable=False)
    modified_on = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'region'


class RegionPoint(models.Model):
    """组成区域的点

    经纬度精确值：
    以度为单位的经纬度值乘以10的6次方，精确到百万分之一度
    """

    region = models.ForeignKey(Region, on_delete=models.CASCADE, db_index=True)
    latitude = models.DecimalField(max_digits=30, decimal_places=25, verbose_name='纬度')
    longitude = models.DecimalField(max_digits=30, decimal_places=25, verbose_name='经度')

    class Meta:
        db_table = 'region_point'


class RegionVehicle(models.Model):
    """区域车辆关系表
    """
    StatusChoice = (
        ('ACTIVE', '启用'),
        ('DEACTIVE', '停用'),
    )

    region = models.ForeignKey(Region, on_delete=models.CASCADE, db_index=True)
    vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE, db_index=True)
    status = models.CharField(max_length=10, choices=StatusChoice, default=StatusChoice[0][0])
    created_time = models.DateTimeField(auto_now_add=True, editable=False)
    modified_on = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'relation_region_vehicle'
